﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using AccesoADatos.Entidades;
using AccesoADatos;


namespace AccesoADatos
{
    public class AccesoCategoria
    {
        #region Métodos

        public AccesoCategoria()
        {
            Conexion Conexion = new Conexion();

        }



        /// <summary>
        /// Inicializa un Objeto de tipo Conexion
        /// </summary>
        /// <returns>Objeto Conexion Inicializado</returns>
        private Conexion InstanciarConexion()
        {
            Conexion conexion = new Conexion();
            return (conexion);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="usernameUsuario" name="claveUsuario"></param>
        /// <returns></returns>
        public bool AgregarCategoria(String nombre,String descripcion,String empate,String dos_jugadores,String imagenRuta)
        {
            Conexion bd = InstanciarConexion();
            SqlCommand command = new SqlCommand();
            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[INSCategoria]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@NombreCategoria", nombre);
                command.Parameters.AddWithValue("@Descripcion", descripcion);
                command.Parameters.AddWithValue("@Empate", empate);
                command.Parameters.AddWithValue("@Dos_Jugadores", dos_jugadores);
                command.Parameters.AddWithValue("@ImagenRuta",imagenRuta);

                SqlDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    return true;

                }
                reader.Close();
                bd.CerrarConexionBd();
                return false;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public Categoria AccesoBuscarCategoria(String nombreCategoria)
        //public String AccesoBuscarCategoria(String nombreCategoria)
        {
            Conexion bd = InstanciarConexion();
            SqlCommand command = new SqlCommand();
            
            try
            {
                bd.AbrirConexionBd();

                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELCategoria]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                command.Parameters.AddWithValue("@nombreCategoria", nombreCategoria);
                
                SqlDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    Categoria miCategoria = new Categoria();
                    miCategoria.IdCategoria = reader.GetInt32(0);
                    miCategoria.NombreCategoria = reader["nombre"].ToString();
                    miCategoria.DescripcionCategoria = reader["descripcion"].ToString();
                    miCategoria.PermiteEmpate = reader["empate"].ToString();
                    miCategoria.DosJugadores = reader["dos_jugadores"].ToString();
                    miCategoria.ImagenRuta = reader["imagenRuta"].ToString();

                    bd.AbrirConexionBd();
                    //if (miCategoria != null) {
                    //    return "obj  no es nulo";
                    //}
                    //return miCategoria.NombreCategoria;
                    return miCategoria;
                  
                    

                }
                else
                {
                    bd.CerrarConexionBd();
                    return null;
                    //return "en el else";

                }
              
            }
            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }
            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        public List<Categoria> ConsultarAllCategorias()
        {
            //Boolean respuestaQuery = false;
            Conexion bd = InstanciarConexion();
            List<Categoria> listaCategorias = new List<Categoria>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELAllCategoria]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;

                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Categoria miCategoria = new Categoria();
                    miCategoria.IdCategoria = reader.GetInt32(0);
                    miCategoria.NombreCategoria = reader["nombre"].ToString();
                    miCategoria.DescripcionCategoria = reader["descripcion"].ToString();
                    miCategoria.PermiteEmpate = reader["empate"].ToString();
                    miCategoria.DosJugadores = reader["dos_jugadores"].ToString();
                    miCategoria.ImagenRuta = reader["imagenRuta"].ToString();
                    listaCategorias.Add(miCategoria);
                }
                return listaCategorias;
            }

            catch (SqlException)
            {
                bd.CerrarConexionBd();
                return null;
            }

            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
        }

        public bool ModificarCategoria(int id,String nombre, String descripcion)
        {
            Conexion bd = InstanciarConexion();
            SqlCommand command = new SqlCommand();
            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[UPDCategoria]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@Id", id);
                command.Parameters.AddWithValue("@NombreCategoria", nombre);
                command.Parameters.AddWithValue("@DescripcionCategoria", descripcion);
                
                SqlDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    return true;

                }
                reader.Close();
                bd.CerrarConexionBd();
                return false;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool EliminarCategoria()
        {
            return false;
        }
        #endregion


    }
}
